package com.recSys.util;

import java.util.HashSet;
import java.util.List;

public class GeneralHandler {
	
	/**
	 * 根据某经纬度坐标，获取半径为dis的圆的外接矩形的经纬度差值
	 * @param lng
	 * @param lat
	 * @return
	 */
	public static double[] getAreaPoint(double lng, double lat, double dis) {
		double[] result = new double[2];
		double r = 6371;
		double dlng = 2*Math.asin(Math.sin(dis/(2*r))/Math.cos(lat*Math.PI/180));
        result[0] = dlng*180/Math.PI; //dlng
        double dlat = dis/r;
        result[1] = dlat*180/Math.PI; //dlat
        return result;
	}

	/**
	 * 计算地球上两点距离
	 * @param longitude1
	 * @param latitude1
	 * @param longitude2
	 * @param latitude2
	 * @return
	 */
	public static double distance(double longitude1, double latitude1, double longitude2, double latitude2) {
		double Lat1 = rad(latitude1); // 纬度
		double Lat2 = rad(latitude2);
		double a = Lat1 - Lat2;//两点纬度之差
		double b = rad(longitude1) - rad(longitude2); //经度之差
		double s = 2 * Math.asin(Math
				.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(b / 2), 2)));//计算两点距离的公式
		s = s * 6378137.0;//弧长乘地球半径（半径为米）
		s = Math.round(s * 10000d) / 10000d;//精确距离的数值
		return s;
	}

	private static double rad(double d) {
		return d * Math.PI / 180.00; //角度转换成弧度
	}


	/**
	 * list 去重
	 * @param list
	 * @return
	 */
	public static List removeDuplicate(List list) {
		HashSet h = new HashSet(list);
		list.clear();
        list.addAll(h);
        return list;
	}

    /**
     * 过滤  把originList中 streamList的内容过滤掉
     * @param originList
     * @param streamList
     * @return
     */
	public static List filter(List originList, List streamList) {
		HashSet h = new HashSet(originList);
        for (Object o :streamList) {
            if(h.contains(o))
                h.remove(o);
        }
        originList.clear();
        originList.addAll(h);
        return originList;
    }
}
